package com.mybatis;

import java.util.concurrent.locks.ReadWriteLock;

/**
 * 其中除PerpetualCache以外，其他的Cache实现都是使用了装饰器模式，由底层的PerpetualCache完成实际的缓存，并在此基础上添加了其他功能。
 *
 * BlockingCache/SynchronizedCache：通过在get/put方式中加锁，保证只有一个线程操作缓存
 *
 * FifoCache、LruCache：当缓存到达上限时候，通过FIFO或者LRU（最早进入内存）策略删除缓存
 *
 * ScheduledCache：在进行get/put/remove/getSize等操作前，判断缓存时间是否超过了设置的最长缓存时间（默认是一小时），如果是则清空缓存--即每隔一段时间清空一次缓存
 *
 * SoftCache/WeakCache：通过JVM的软引用和弱引用来实现缓存，当JVM内存不足时，会自动清理掉这些缓存
 *
 * PerpetualCache：使用一个HashMap作为缓存容器，实现了简单的缓存功能（从这里可以看到，这并不是一个线程安全的类）,get和put等操作都是直接调用HaspMap的相应方法实现,实际定义如下
 * ---------------------
 * 原文：https://blog.csdn.net/finalcola/article/details/81155517
 */
public interface Cache {
    String getId();
    void putObject(Object key, Object value);
    Object getObject(Object key);
    Object removeObject(Object key);
    void clear();
    int getSize();
    ReadWriteLock getReadWriteLock();
}
